package com.testing.class7;

public class RegexLearn {
    public static void main(String[] args) {
        String roy="roy老师";
        String will="will老师";
        String tuFei="土匪.老师";
        String youMi="悠米老师";
        String rmi="r米老师";
        String kaKa="卡卡";
        String gang="\\老师";
        String doubleRoy="royrop老师";
        System.out.println(gang);

        /**
         *          .匹配除”\r\n”(换行回车)之外的任何单个字符
         *          \\d 匹配任意数字，等价于[0-9] \\D
         *          \\s 匹配空格字符，等价于[\f\n\r\t\v]  \\S
         *          \\w 匹配单词类字符，等价于[A-Za-z0-9_] \\W
         *          ^ $
         *         为什么会有两个\\呢：因为在java中，本身\就代表了转义符，比如具有特殊含义的：\t 这是一个tab键
         *         所以如果要在正则表达式中表示一个元字符的时候用两个斜杠
         *         对应的，有个非常特殊的：就是斜杠  比如在正则表达式中表示一个斜杠
         *         比如：\老师   java中本身\就会去跟老结合，把老转一下义，所以java中表示杠老师，本身就要写两个杠
         *         注意正则表达式在java中使用的时候，要用\\d的格式，因为\本身就代表了java中的转义操作。
         *         尤其注意如果要表达，一个在正则表达式中具有的特殊含义的字符的时候，转义用\\，比如  \\.   \\[，尤其注意\ ，要用\\\\。
         */


        /**
         * 正则表达式中最常用的符号：
         * 	.  表示任意一个字符
         * 	\\ 表示转义
         * 	[] 表示将可选的字符选项，集合到一起，可以去匹配一个字符。
         *        {}表示元字符出现的次数，和它前面的最近的元字符进行结合。
         * 	* 表示{0,n}
         * 	+ 表示{1，n}
         * 	？{0,1}
         * 	（）将几个字符组合起来形成一个词组，作为一个整体来进行匹配。
         * 	|  表示或  ，通常在词组中进行使用  比如 (roy|rop){3} 表示roy或者rop出现三次。
         */




        //制定一个规则，最后一位是老师结尾的字符串。这就是一个正则表达式 regex
        //匹配一个有两个任意字符和一个.号老师的字符。
        String teacher="^..\\.老师$";

        //注意：在Java正则表达式中，两个\\表达要插入一个正则表达式的斜线，所以java的正则写法表达特殊含义的字符都是\\开头。
        //因而在正则中有特殊含义的字符比如“[”的转义需要用“\\[”，尤为特殊的是表达一个\在正则表达式中需要用四个\\\\来表达。
        //String gang="\\老师"; 两个斜杠代表一个斜杠
        // String gangTeacher="\\\\老师";正则表达式中两个斜杠代表要插入一个斜杠，所以是四个斜杠
        String gangTeacher="\\\\老师";

        String threeWTeacher="...老师";

        //表示的是，老师之前有1到3个字符，这些字符的取值范围是  r/o/y/悠/米/./\这七个之中的任意一个
        String royAndy="r[roy悠米\\.\\\\]{1,3}老师";

        //表示roy 或者rop这两个词组出现两次。
        String royDouble1="(ro[yp]){2}老师";
        String royDouble="(roy|rop){2}老师";

        System.out.println(roy+"匹配结果是"+roy.matches(royAndy));
        System.out.println(will+"匹配结果是"+will.matches(royAndy));
        System.out.println(tuFei+"匹配结果是"+tuFei.matches(royAndy));
        System.out.println(youMi+"匹配结果是"+youMi.matches(royAndy));
        System.out.println(kaKa+"匹配结果是"+kaKa.matches(royAndy));
        System.out.println(rmi+"匹配结果是"+rmi.matches(royAndy));
        System.out.println(gang+"匹配结果是"+gang.matches(royAndy));
        System.out.println(doubleRoy+"匹配结果是"+doubleRoy.matches(royDouble));




    }
}
